<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

/**
 * CodeIgniter Application Controller Class
 */
class CI_Controller {

    private static $instance;

    /**
     * Constructor
     */
    public function __construct()
    {
        //通过self::$instance实现单例化，在第一次实例时，这个静态变量实质就是引用了这个实例。
        //以后都可以通过&get_instance();来获得这个单一实例。
        self::$instance =& $this;

        //把目前程序已经加载的所有的组件都给这个超级控制器来掌管。
        foreach (is_loaded() as $var => $class)
        {
            $this->$var =& load_class($class);
        }

        //给超级控制器加载Loader组件，这个组件是它的好助手，很多时候你会经常用到$this->load->xxx()的形式加载某个东西，
        //这个load就是控制器被构造的时候就伴随存在的。
        $this->load =& load_class('Loader', 'core');

        //初始化Loader组件，详细Loader.php
        $this->load->initialize();

        log_message('debug', "Controller Class Initialized");
    }

    public static function &get_instance()
    {
        return self::$instance;
    }
}